package com.xjggb.demo.config;


import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

@Configuration
public class TTlRabbitMqConfiguration {
    /*
    * 声明注册fanoyut模式交换机
    * */
    @Bean
    public DirectExchange ttldirectExchange(){
   return new DirectExchange("ttl_direct_exchange",true,false);
    }
    /*
    * 声明队列
    * */
    @Bean
    public Queue ttlsmsQueue(){
   /*
   * 设置过期时间
   * durable 表示消息队列是否持久化 true表示持久化
   * autoDelete当所有消费客户端连接断开后，是否自动删除 队列 true：删除 false：不删除
   *
   * */
        Map<String, Object> args = new HashMap<>();
        //设置过期时间
        args.put("x-message-ttl",5000); //单位为毫秒必须要int
        //绑定死信队列 时间为5秒超过时间没有被消费就会跳到dead_direct_exchange交换机中进入死信队列
        args.put("x-dead-letter-exchange","dead_direct_exchange");
        //限制长度 当数量大于6时多余的数据进入死信队列
        args.put("x-max-length",6);
        //FANOUT模式不需要添加路由key
        args.put("x-dead-letter-routing-key","dead");
        return new Queue("ttl.direct.queue",true,false,false,args);
    }

    @Bean
    public Binding emailBinding(){
        return BindingBuilder.bind(ttlsmsQueue()).to(ttldirectExchange()).with("ttl");
    }

}
